/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.mindbox.mueblesalpes.negocio.entity;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

/**
 * Clase que representa el inventario de muebles
 * @author Catalina Soto Zuluaga
 */
@Entity
@Table(name="mueble_inventario")
public class MuebleInventario implements Serializable,Cloneable{

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_MUEBLEINVENTARIO")
    @SequenceGenerator(name = "SEQ_MUEBLEINVENTARIO", allocationSize = 1, sequenceName = "muebleinventario_seq")
    private Long idMuebleInventario;

    @OneToOne
    private Mueble mueble;
    private Double precio;
    private Integer cantidad;

    /**
     * Método que obtiene la cantidad de muebles
     * @return cantidad
     */
    public Integer getCantidad() {
        return cantidad;
    }

    /**
     * Método que asigna la cantidad de muebles
     * @param cantidad
     */
    public void setCantidad(Integer cantidad) {
        this.cantidad = cantidad;
    }

    /**
     * Método que retorna un mueble
     * @return mueble
     */
    public Mueble getMueble() {
        return mueble;
    }

    /**
     * Método que asigna un mueble
     * @param mueble
     */
    public void setMueble(Mueble mueble) {
        this.mueble = mueble;
    }

    /**
     * Método que retorna el precio de un mueble
     * @return precio
     */
    public Double getPrecio() {
        return precio;
    }

    /**
     * Método que asigna el precio de un mueble
     * @param precio
     */
    public void setPrecio(Double precio) {
        this.precio = precio;
    }

    /**
     * Método que asigna la llave primaria al inventario del mueble
     * @return Identificador del inventario del mueble
     */
    public Long getIdMuebleInventario() {
        return idMuebleInventario;
    }

    /**
     * Asigna el identificador del inventario del mueble
     * @param idMuebleInventario Identificador único
     */
    public void setIdMuebleInventario(Long idMuebleInventario) {
        this.idMuebleInventario = idMuebleInventario;
    }
    
    @Override
    public Object clone() throws CloneNotSupportedException {
        MuebleInventario m = new MuebleInventario();
        m.setCantidad(this.cantidad);
        m.setMueble(this.mueble);
        m.setPrecio(this.precio);
        m.setIdMuebleInventario(this.idMuebleInventario);
        return m;
    }

    @Override
    public boolean equals(Object obj) {
        if(obj != null && obj instanceof MuebleInventario &&
                this.getIdMuebleInventario() != null &&
                ((MuebleInventario)obj).getIdMuebleInventario() != null)
            return this.getIdMuebleInventario().equals(((MuebleInventario)obj).getIdMuebleInventario());
        return false;       
    }

    @Override
    public int hashCode() {
        if(this.getIdMuebleInventario() == null)
            return 0;
        return this.getIdMuebleInventario().hashCode();
    }
 }
